#include<stdio.h>
#include<stdlib.h>

//使用柔性数组测试
//好处:方便内存释放,用户做一次free就可以把所有的内存也给释放掉
struct Stu
{
  int i;//柔性数组前至少要有一个成员
  int arr[];//柔性数组
};
typedef struct Stu Stu;
#include<stdio.h>
int main()
{
  //sizeof(含有整形数组的结构体)得到的值不包括柔性成员大小
  Stu* s = (Stu*)malloc(sizeof(Stu) + sizeof(int)*10);//为柔性数组开辟10个整形空间
  if(s != NULL)
  {
   for(int i = 0;i<10;i++)
   {
     s->arr[i] = i;
     printf("%d ",s->arr[i]);
   }
   printf("\n");
  }
  //扩容
  Stu* tmp = (Stu*)realloc(s,sizeof(Stu)+20*sizeof(int));
  if(tmp != NULL)
    s = tmp;
  for(int i = 0;i<20;i++)
  {
     s->arr[i] = i;
     printf("%d ",s->arr[i]);
  }
  printf("\n");
  //销毁
  free(s);
  s = NULL;//记得要把指针置为空,防止悬空指针
  return 0;
}
